很好 👌 這裡我幫你把 Day 5 的重構案例 改成使用 decimal 型別,並在內容中解釋為什麼金融計算應該用 decimal 而不是 double。
到目前為止,我們寫的程式都在 Main 方法裡:有變數、判斷式、迴圈。
雖然可以跑,但當同樣的邏輯需要重複出現時,就會造成程式碼冗長又難維護。
今天我們要來認識 C# 的 方法 (Method),看看如何用方法讓程式變得乾淨又好讀。
假設我們要計算三檔股票的成交金額,初學者可能會這樣寫:
using System;
class Program
{
    static void Main(string[] args)
    {
        string stock1 = "2344";
        int volume1 = 1000;
        decimal price1 = 27.95m;
        decimal amount1 = volume1 * price1;
        Console.WriteLine($"股票 {stock1} 成交金額為 {amount1}");
        string stock2 = "2330";
        int volume2 = 500;
        decimal price2 = 1280m;
        decimal amount2 = volume2 * price2;
        Console.WriteLine($"股票 {stock2} 成交金額為 {amount2}");
        string stock3 = "2303";
        int volume3 = 200;
        decimal price3 = 45.7m;
        decimal amount3 = volume3 * price3;
        Console.WriteLine($"股票 {stock3} 成交金額為 {amount3}");
    }
}
👉 問題:
volume * price」這段邏輯我們可以把「計算成交金額」和「顯示結果」各自抽出成方法。
using System;
class Program
{
    static void Main(string[] args)
    {
        PrintAmount("2344", 1000, 27.95m);
        PrintAmount("2330", 500, 1280m);
        PrintAmount("2303", 200, 45.7m);
    }
    // 計算成交金額
    static decimal CalculateAmount(int volume, decimal price)
    {
        return volume * price;
    }
    // 輸出成交金額
    static void PrintAmount(string stock, int volume, decimal price)
    {
        decimal amount = CalculateAmount(volume, price);
        Console.WriteLine($"股票 {stock} 成交金額為 {amount}");
    }
}
👉 好處:
CalculateAmount 專心做計算PrintAmount 專心做輸出Main 看起來就很乾淨,只有三行呼叫執行結果:
股票 2344 成交金額為 27950.0
股票 2330 成交金額為 640000.0
股票 2303 成交金額為 9140.0
decimal?在金融、金錢計算上,一定要避免用 double。原因是:
double 屬於 浮點數 (floating-point),它在底層是用二進位近似儲存小數。
0.1 + 0.2 在電腦裡可能變成 0.30000000000000004。decimal 屬於 定點小數 (fixed-point),精度較高,特別適合處理「金額」與「精確小數運算」。
decimal。👉 簡單來說:
decimal
double
C# 程式一定會有一個 Main 方法,它是程式的入口點,名稱 不能改。
static void Main(string[] args)
string[] args 用來接收命令列參數,例如:
dotnet run 2330 100
args[0] = "2330"
args[1] = "100"
範例:
static void Main(string[] args)
{
    if (args.Length >= 2)
    {
        string stock = args[0];
        decimal target = decimal.Parse(args[1]);
        Console.WriteLine($"股票 {stock} 的目標價設定為 {target}");
    }
    else
    {
        Console.WriteLine("請輸入股票代號與目標價,例如:dotnet run 2330 100");
    }
}
預設情況下 Main 是 void,代表不回傳任何東西。
但也可以寫成 int,回傳程式的「結束狀態」:
static int Main(string[] args)
{
    Console.WriteLine("程式執行完成");
    return 0; // 0 代表成功結束
}
在一些系統程式裡,這個數字會被用來判斷程式是否正確執行。
今天我們學會了:
Main 是程式入口點,不能改名args 用來接收命令列參數明天,我們要介紹 類別 (Class) 與物件 (Object),把「股票代號、股價、成交量」封裝成一個 Stock 類別,正式進入物件導向的世界。
要不要我幫你把 Day 6 草稿 也接著寫好,用 Stock 類別封裝股票資料,並帶出屬性與建構子的概念?